package horncomb.bpm.task.core;

import horncomb.bpm.process.core.Token;

import java.util.Date;
import java.util.List;

/**
 * @author Daniel
 */
public interface TaskInstance {
	/**
	 * 任务实例
	 * @return
	 */
	public String getType();

	public Token getToken();

	/**
	 * 获取任务办理人，包括实际的或候选者。
	 * @return
	 */
	public String[] getActorTerm();

	/**
	 * 是否可以提交
	 * @return
	 */
	public boolean isSubmitable();

	/**
	 * 任务是否可以被重做
	 * @return
	 */
	public boolean isRedoable();

	public void finish(Object contextModel);

	/**
	 * 完成任务
	 * @param context
	 */
	public void finish(String transitionId, Object contextModel);

	/**
	 * 添加任务注释
	 * @param comment
	 */
	public void addComment(String comment);

	/**
	 * 获取任务注释
	 * @return
	 */
	public List<? extends TaskComment> getComments();

	/**
	 * 任务实体类
	 * @return
	 */
	public TaskInstanceEntity getEntity();

	/**
	 * @return the id
	 */
	public String getId();

	/**
	 * @return the name
	 */
	public String getName();

	/**
	 * @return the actor
	 */
	public String getActor();

	/**
	 * @return the candidate
	 */
	public String[] getCandidate();

	/**
	 * @return the startedDate
	 */
	public Date getStartedDate();

	/**
	 * @return the endDate
	 */
	public Date getEndDate();

	/**
	 * @return the holding
	 */
	public boolean isHolding();

	/**
	 * @return the createdDate
	 */
	public Date getCreatedDate();

	/**
	 * @param createdDate
	 *            the createdDate to set
	 */
	public void setCreatedDate(Date createdDate);

	public boolean isHiding();

	public void setHiding(boolean hiding);
}